#include <stdio.h>

// 声明/定义 大小
// 初始化  1.满初始化  2.未初始化  3.部分初始化(行部分初始化/整体部分初始化)
// 访问
// 三要素
int main()
{
#if 0
// 声明/定义 大小
    int arr[3][4];  //int[4] arr[3]; T arr[3];

    printf("sizeof(arr) = %d\n",sizeof(arr));
    printf("sizeof(arr[0]) = %d\n",sizeof(arr[0]));
    printf("sizeof(int[3][4]) = %d\n",sizeof(int[3][4]));
#endif

#if 0
    // 满初始化
    int arr[3][4] = {{1,2,3,4},
                     {5,6,7,8},
                     {9,10,11,12}};
    for (int  i = 0; i < 3; i++)
    {
        for(int j = 0; j < 4; j++)
        {
            printf("%3d",arr[i][j]);
        }
        putchar(10);
    }
#endif
#if 0
    // 未初始化
    int arr[3][4];
//        = {{1,2,3,4},
//                     {5,6,7,8},
//                     {9,10,11,12}};
    for (int  i = 0; i < 3; i++)
    {
        for(int j = 0; j < 4; j++)
        {
            printf("%3d",arr[i][j]);
        }
        putchar(10);
    }
#endif

#if 0
    // 行部分初始化
    int arr[3][4] = {{1,2,3,4},
                     {},
//                     {5,6,7,8},
                     {9,10,11,12}};
    for (int  i = 0; i < 3; i++)
    {
        for(int j = 0; j < 4; j++)
        {
            printf("%3d",arr[i][j]);
        }
        putchar(10);
    }
#endif

#if 0
    // 整体部分初始化
    int arr[3][4] = {1,2,
                   5,6,7,8,
                     9,10,11,12};
    for (int  i = 0; i < 3; i++)
    {
        for(int j = 0; j < 4; j++)
        {
            printf("%3d",arr[i][j]);
        }
        putchar(10);
    }
#endif

    // 省 3 等价于 省了一位数组的大小，如果省 4 等价于省了类型的大小
    // int arr[] = {{1,2,5,6,7,8};
    int arr[][4] = {1,2,
                     5,6,7,8,
                     9,10,11,12};
    for (int  i = 0; i < sizeof(arr)/sizeof(int[3]); i++)
    {
        for(int j = 0; j < 3; j++)
        {
            printf("%3d",arr[i][j]);
        }
        putchar(10);
    }
    return 0;
}

